package com.hm.hall.commons.util;

import org.apache.commons.lang.StringUtils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author wei
 */
public class Validators {
    /**
     * 邮箱校验
     *
     * @param mail
     * @return 合法返回true
     */
    public static boolean checkEmail(String mail) {
        if (mail == null || mail.length() < 5) {
            return false;
        }

        String regex = "\\w+([-_+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(mail);
        return m.find();
    }

    /**
     * 单个手机号校验， 11位  regex = "^1[3,4,5,6,7,8,9]\\d{9}$";
     *
     * @param mobile
     * @return 合法返回true
     */
    public static boolean checkMobile(String mobile) {
        if (mobile == null || mobile.length() < 11) {
            return false;
        }
        String regex = "^1[3,4,5,6,7,8,9]\\d{9}$";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(mobile);
        return m.find();
    }


    /**
     * 批量手机号校验 (单个手机号，或者多个英文,连接的手机号为合法输入)
     * "13333333333,13333333333,13333333333"格式  regex = "(\\d{11},)+\\d{11}$";
     *
     * @param mobiles
     * @return 合法返回true
     */
    public static boolean checkBatchMobile(String mobiles) {
        if (mobiles == null || mobiles.length() < 11) {
            return false;
        }
        if (mobiles.length() == 11) {
            return checkMobile(mobiles);
        }
        String regex = "(\\d{11},)+\\d{11}$";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(mobiles);
        return m.find();
    }

    /**
     * 检查数值id串合法性;单个数值num，或者英文逗号","分割的id列表
     *
     * @param numbers
     * @return 合法返回true
     */
    public static boolean checkNumbers(String numbers) {
        if (numbers == null || numbers.length() < 1) {
            return false;
        }
        if (StringUtils.isNumeric(numbers)) {
            return true;
        }

        String regex = "(\\d+,)+\\d+$";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(numbers);
        return m.find();
    }

    /**
     * 计算字符串的字节数（汉字按2字节计算）
     * 由于Java是基于Unicode编码的，因此，一个汉字的长度为1，而不是2。但有时需要以字节单位获得字符串的长度。例如，“123abc长城”
     * 按字节长度计算是10
     * ，而按Unicode计算长度是8。为了获得10，需要从头扫描根据字符的Ascii来获得具体的长度。如果是标准的字符，Ascii的范围是0至255
     * ，如果是汉字或其他全角字符，Ascii会大于255。因此，可以编写如下的方法来获得以字节为单位的字符串长度。
     *
     * @param s
     * @return
     */
    public static int getLengthInCharAndChineseIn2(String s) {
        int length = 0;
        for (int i = 0; i < s.length(); i++) {
            int ascii = Character.codePointAt(s, i);
            if (ascii >= 0 && ascii <= 255) {
                length++;
            } else {
                length += 2;
            }

        }
        return length;

    }

    public static void main(String[] args) {
//		System.out.println(checkMobile("12866569999"));
        System.out.println(checkBatchMobile("18033441837"));

        System.out.println(checkBatchMobile("18033441837,18033441837"));
//		System.out.println(checkBatchMobile("13896552010,13896552010"));
//		System.out.println(checkBatchMobile("13896552010,13896552010,"));
//		System.out.println(checkBatchMobile(",13896552010,13896552010,"));
//		System.out.println(checkBatchMobile("1389655201013896552010"));

//		System.out.println(checkNumbers("234234"));
//		System.out.println("234234".split(",").length);
//
//		System.out.println(checkNumbers("234234,234234"));
//		System.out.println(checkNumbers("234234,234234,"));
//		System.out.println(checkNumbers("234234,234234,234234,234234"));

//		System.out.println(getLengthInCharAndChineseIn2("中；;1"));//6
//		try {
//			System.out.println("中；;1".getBytes("utf-8").length); // 8
//			System.out.println("中；;1".getBytes("gbk").length); //6
//		} catch (UnsupportedEncodingException e) {
//			e.printStackTrace();
//		}
    }
}

